###前提・実現したいこと
ArduinoとC++で分別機械を作っています。
現状、2番の入力ピンの値をハードウェア上でHIGHに変えているにもかかわらず、以下のwhile文に入れなくて困っています。
val_Read_SW_1=digitalRead(Read_SW_1);
while(val_Read_SW_1==HIGH)
###発生している問題・エラーメッセージ
エラーメッセージなし。 しかし、2番の入力ピン(Read_SW_1=2)をHighにしているのにもかかわらず、while(val_Read_SW_1==HIGH)の中に入れない。 しかし、ハードウェア上は問題ないと思われプログラム上の問題だと思われる。
###該当のソースコード
#include<LiquidCrystal_I2C.h> #include<Servo.h> LiquidCrystal_I2C lcd(0x27, 16, 2); int Read_SW_1=2; int Solenoid=6; int SS1=7; int SS2=8; int SS3=9; int SS4=10; int val_SS1=0; int val_SS2=0; int val_SS3=0; int val_SS4=0; int val_Read_SW_1=0; int NG_OVER=0; int OK=0; int NG_UNDER=0; Servo myServo; void setup() { lcd.begin(); pinMode(Read_SW_1,INPUT); pinMode(Solenoid,OUTPUT); pinMode(SS1,INPUT); pinMode(SS2,INPUT); pinMode(SS3,INPUT); pinMode(SS4,INPUT); myServo.attach(4); myServo.writeMicroseconds(1425); digitalWrite(Solenoid,HIGH); lcd.setCursor(0,0); lcd.print("Sortting"); lcd.setCursor(0,1); lcd.print(" Machime."); delay(500); lcd.clear(); lcd.setCursor(0,0); lcd.print(" CHANGE 4.0"); delay(300); lcd.clear(); delay(100); lcd.setCursor(0,0); lcd.print(" CHANGE 4.0"); delay(300); lcd.clear(); delay(100); lcd.print(" CHANGE 4.0"); delay(300); lcd.clear(); delay(100); lcd.setCursor(0,0); lcd.print(" CHANGE 4.0"); delay(2000); lcd.clear(); lcd.setCursor(0,0); lcd.print("PULL UP A SWITCH"); lcd.setCursor(0,1); lcd.print(" TO START."); } void loop() { SS1 = digitalRead(7); SS2 = digitalRead(8); SS3 = digitalRead(9); SS4 = digitalRead(10); val_Read_SW_1=digitalRead(Read_SW_1); while(val_Read_SW_1==HIGH){ digitalWrite(Solenoid,LOW ); do{ delay(50); myServo.writeMicroseconds(2000); }while(SS1==LOW); myServo.writeMicroseconds(1425); delay(600); digitalWrite(Solenoid,LOW); do{ if(SS2==HIGH) { NG_OVER=NG_OVER+1; } if(SS3==HIGH) { OK=OK+1; } if(SS4==HIGH) { NG_UNDER=NG_UNDER+1; } }while(SS2==LOW&&SS3==LOW&&SS4==LOW); lcd.clear(); lcd.setCursor(0,0); lcd.print("OVER OK UNDER"); lcd.setCursor(0,1); lcd.print(NG_OVER); lcd.setCursor(6,1); lcd.print; lcd.setCursor(12,1); lcd.print(NG_UNDER); lcd.setCursor(5,1); lcd.print(","); lcd.setCursor(11,1); lcd.print(","); } }
###試したこと
以下の違うプログラムを試した際には、問題なく動きました。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
#include<LiquidCrystal_I2C.h> //4.2A Version
#include <Servo.h>
LiquidCrystal_I2C lcd(0x27,16,2);
int Read_SW_1=2;
int Solenoid = 6;
int SS1=7;
int SS2=8;
int SS3=9;
int SS4=10;
//int val_SS1=0;
int val_SS2=0;
int val_SS3=0;
int val_SS4=0;
int val_Read_SW_1=0;
int NG_OVER=0;
int OK=0;
int NG_UNDER=0;
Servo myServo;
void setup()
{
lcd.begin();
pinMode(Read_SW_1,INPUT);
pinMode(Solenoid, OUTPUT);
pinMode(SS1,INPUT);
pinMode(SS2,INPUT);
pinMode(SS3,INPUT);
pinMode(SS4,INPUT);
myServo.attach(4);
digitalWrite(Solenoid, HIGH);
myServo.writeMicroseconds(0);
lcd.setCursor(0,0);
lcd.print("Callar sortting");
lcd.setCursor(0,1);
lcd.print(" Machime.");
}
void loop()
{
int val_Read_SW_1=digitalRead(Read_SW_1);
if(val_Read_SW_1==HIGH)
{
SS1 = digitalRead(7); SS2 = digitalRead(8); SS3 = digitalRead(9); SS4 = digitalRead(10); myServo.writeMicroseconds(1451); if (SS1 == HIGH) { myServo.writeMicroseconds(0); delay(460 ); digitalWrite(Solenoid, LOW); delay(500); if(SS2==HIGH) { NG_OVER=NG_OVER+1; } if(SS3==HIGH) { OK=OK+1; } if(SS4==HIGH) { NG_UNDER=NG_UNDER+1; } lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,0); lcd.print("OVER OK UNDER"); lcd.setCursor(0,1); lcd.print(NG_OVER); lcd.setCursor(6,1); lcd.print; lcd.setCursor(12,1); lcd.print(NG_UNDER); lcd.setCursor(5,1); lcd.print(","); lcd.setCursor(11,1); lcd.print(","); } digitalWrite(Solenoid, HIGH); myServo.writeMicroseconds(0); }
}
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
しかし、以下のまた違うプログラムはまたしてもwhileに入れず、、
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
#include<LiquidCrystal_I2C.h>
#include <Servo.h>
LiquidCrystal_I2C lcd(0x27,16,2);
int Read_SW_1=2;
int Solenoid = 6;
int SS1=7;
int SS2=8;
int SS3=9;
int SS4=10;
int val_SS1=0;
int val_SS2=0;
int val_SS3=0;
int val_SS4=0;
int val_Read_SW_1=0;
int NG_OVER=0;
int OK=0;
int NG_UNDER=0;
Servo myServo;
void setup()
{
lcd.begin();
pinMode(Read_SW_1,INPUT);
pinMode(Solenoid, OUTPUT);
pinMode(SS1,INPUT);
pinMode(SS2,INPUT);
pinMode(SS3,INPUT);
pinMode(SS4,INPUT);
myServo.attach(4);
digitalWrite(Solenoid, HIGH);
myServo.writeMicroseconds(0);
lcd.setCursor(0,0);
lcd.print("Callar sortting");
lcd.setCursor(0,1);
lcd.print(" Machime.");
}
void loop()
{
int val_Read_SW_1=digitalRead(Read_SW_1);
if(val_Read_SW_1==HIGH)
{
SS1 = digitalRead(7); SS2 = digitalRead(8); SS3 = digitalRead(9); SS4 = digitalRead(10); myServo.writeMicroseconds(1451); if (SS1 == HIGH) { myServo.writeMicroseconds(0); delay(460 ); digitalWrite(Solenoid, LOW); delay(500); } digitalWrite(Solenoid, HIGH); myServo.writeMicroseconds(0); do { SS2 = digitalRead(8); SS3 = digitalRead(9); SS4 = digitalRead(10); if(SS2==HIGH) { NG_OVER=NG_OVER+1; break; } if(SS3==HIGH) { OK=OK+1; break; } if(SS4==HIGH) { NG_UNDER=NG_UNDER+1; break; } }while(SS2==LOW&&SS3==LOW&&SS4==LOW); lcd.setCursor(0,0); lcd.print("OVER OK UNDER"); lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); lcd.print(NG_OVER); lcd.setCursor(6,1); lcd.print; lcd.setCursor(12,1); lcd.print(NG_UNDER); lcd.setCursor(5,1); lcd.print(","); lcd.setCursor(11,1); lcd.print(","); }
}
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
中にあるdo while文も間違っているんですかね、、?
###補足情報(言語/FW/ツール等のバージョンなど)
C++ Arduino
###前提・実現したいこと
ここに質問したいことを詳細に書いてください
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
###発生している問題・エラーメッセージ
エラーメッセージ
###該当のソースコード
ここにご自身が実行したソースコードを書いてください
###試したこと
課題に対してアプローチしたことを記載してください
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。