Trouble executing multiple "if" functions

so, this is my first Arduino project. I'm using a lcd, potentiometer, HC08, a simple buzzer and a button.

the goal is that people can select there name and press the button, while I get their name on my phone using the app BLE TOOLS.

Everything Is working just fine except the fact that at the end of the code, only the first "if" scenario works. On occasion an other name will fall trough but speaking only the first works(with the name Quinn). I already played with: "if", "if else" and "while".

I hope you all can see the problem trough my English. The code does have dutch words en names in it so please do ask if there is something unexplained.

the problem starts at: if (waardeS1 == HIGH && POTNAAMWaarde == Quinn)

#include <SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const byte rxPin = 9;
const byte txPin = 8;
SoftwareSerial mySerial(rxPin, txPin);  // RX is poort 10 - TX is poort 11
LiquidCrystal_I2C lcd(0x27, 20, 4);     // adres van lcd = 0x27 en heeft op 4 regels elk 20 karakters
#define POTNAAM A3                      // pin a3 van de arduino noemen we POTNAAM
#define POTKLAS A4                      // pin a4 vann de arduino noemen we POTKLAS
int POTNAAMWaarde = 0;                  // De waarde van POTNAAMWaarde begint op 0
int S1 = 2;                             // pin 2 van de arduino noemen we S1
int BUZ = 13;                        // pin 13 van de arduino noemen we BUZ, klinkt signaal bij opstarten
int waardeS1 = LOW;                     // de waarde van S1 begint op 0


void setup() {

pinMode (rxPin, INPUT);
pinMode (txPin, OUTPUT);
pinMode (POTNAAM, INPUT);           // POTNAAM is gemarkeerd als input
pinMode (POTKLAS, INPUT);           // POTKLAS is gemarkeerd als input
pinMode (S1, INPUT);                // S1 is gamarkeerd als input
pinMode (BUZ, OUTPUT);              // BUZ is gemarkeerd als output
Serial.begin (9600);                // stel de snelheid van de serial in op 9600
mySerial.begin(9600);               // zet snelheid gelijkl met de rest van het systeem
//while(!Serial);
mySerial.println ("Aanwezig:");

lcd.init();                         // activeer lcd
lcd.backlight();                    // activeer backlight van lcd
lcd.setCursor(0, 0);                // zet de cursor op positie 0 regel 1
lcd.print("Klas:       JN3.ROBO");  // print op deze regel deze tekst
lcd.setCursor(0, 1);                // zet de cursor op positie 0 regel 2
lcd.print("Selecteer naam:   ");    // print op deze regel deze tekst
lcd.setCursor(0, 3);                // zet de cursor op positie 0 regel 4
lcd.print("huiswerk:   ");          // print op deze regel deze tekst

}

//String messageBuffer = ""; 
//String message = "";
//char dataByte;

void loop() {

POTNAAMWaarde = analogRead(POTNAAM); //POTNAAMWaarde = analoge waarde van POTNAAM
waardeS1 = digitalRead(S1);         // waardeS1 = binaire waarde van S1 
//Serial.println (waardeS1);        // wijzig in code om de ingang te controleren in de monitor

if (mySerial.available())  
  Serial.write(mySerial.read());
  //dataByte = mySerial.read();
  //Serial.write (dataByte);  

if (Serial.available()) 
  mySerial.write(Serial.read());
  //dataByte = Serial.read();
  //mySerial.write(dataByte);
 

int Quinn =   map(POTNAAMWaarde, 0, 1023, 1, 50);       // in de volgende regels krijgt elke naam een beriek van de potmeter toegewezen
int Maike =   map(POTNAAMWaarde, 0, 1023, 51, 100);
int Dylan =   map(POTNAAMWaarde, 0, 1023, 101, 150);
int Stijn =   map(POTNAAMWaarde, 0, 1023, 151, 200);
int Yuri =    map(POTNAAMWaarde, 0, 1023, 201, 250);
int Miko =    map(POTNAAMWaarde, 0, 1023, 251, 300);
int Aron =    map(POTNAAMWaarde, 0, 1023, 301, 350);
int Vince =   map(POTNAAMWaarde, 0, 1023, 351, 400);
int Rick =    map(POTNAAMWaarde, 0, 1023, 401, 450);
int terug =   map(POTNAAMWaarde, 0, 1023, 451, 500);   // het bereik dat overblijft krijgt later een pijl naar links toegewezen

lcd.setCursor(6, 2);                // zet de cursor op karakter 6 op regel 3
if (POTNAAMWaarde == Quinn) {       // wanneer de potmeter het bereik van Quinn heeft dan,
  lcd.print ("Quinn         ");}    // schrijf Quinn op de plek van de cursor  
if (POTNAAMWaarde == Maike) {       // de overige namen volgen hier.
  lcd.print ("Maike        ");}
if (POTNAAMWaarde == Dylan) {  
  lcd.print ("Dylan         ");}          
if (POTNAAMWaarde == Stijn) {  
  lcd.print ("Stijn         ");}            
if (POTNAAMWaarde == Yuri) {  
  lcd.print ("Yuri          ");}            
if (POTNAAMWaarde == Miko) {  
  lcd.print ("Miko          ");}           
if (POTNAAMWaarde == Aron) {  
  lcd.print ("Aron          ");}             
if (POTNAAMWaarde == Vince) {  
  lcd.print ("Vince         ");}             
if (POTNAAMWaarde == Rick) {  
  lcd.print ("Rick          ");}             
if (POTNAAMWaarde == terug) {       // wanneer de potmeter het bereik van Quinn heeft dan,
  lcd.print ("<--         ");}      // pint een pijltje zodat de gebruiker weet om terug te gaan

if (waardeS1 == HIGH){              // wanneer de schakelaar ingedrukt wordt dan,
  //mySerial.println("Quinn");
  digitalWrite(BUZ, HIGH);          // zet uitgang BUZ op aan
  delay(50);                        // wacht 0,05 sec
  digitalWrite(BUZ, LOW);           // zet uitgang BUZ op uit
  delay(100);                       // wacht 0,05 sec
  digitalWrite(BUZ, HIGH);          // zet uitgang BUZ op aan
  delay(50);                        // wacht 0,05 sec
  digitalWrite(BUZ, LOW);   }        // zet uitgang BUZ op uit
 // delay(1500); }                    // wacht 1,5 sec om te voorkomen dat er lang ingedrukt wordt

if (waardeS1 == HIGH && POTNAAMWaarde == Quinn)
{ mySerial.write ("Quinn"); 
} 

if (waardeS1 == HIGH && POTNAAMWaarde == Maike)
{  mySerial.write ("Maike"); }

if (waardeS1 == HIGH && POTNAAMWaarde == Dylan)
{  mySerial.write ("Dylan"); }

if (waardeS1 == HIGH && POTNAAMWaarde == Stijn)
{  mySerial.write ("Stijn"); }

if (waardeS1 == HIGH && POTNAAMWaarde == Yuri)
{  mySerial.write ("Yuri"); }

if (waardeS1 == HIGH && POTNAAMWaarde == Miko)
{  mySerial.write ("Miko"); }

if (waardeS1 == HIGH && POTNAAMWaarde == Aron)
{  mySerial.write ("Aron"); }

if (waardeS1 == HIGH && POTNAAMWaarde == Vince)
{  mySerial.write ("Vince"); }

if (waardeS1 == HIGH && POTNAAMWaarde == Rick)
{  mySerial.write ("Rick"); }
}

I think you do not understand what the map() function does.

This line

int Quinn =   map(POTNAAMWaarde, 0, 1023, 1, 50);       // in de volgende regels krijgt elke naam een beriek van de potmeter toegewezen

takes the value of POTNAAMWaarde and converts it to an integer between 1 and 50, which is assigned to "Quinn".

So how is this supposed to work?

if (POTNAAMWaarde == Quinn) {       // wanneer de potmeter het bereik van Quinn heeft dan,

I'm not sure I understand your code, but with this part assigning the names to mapped values:

it doesn't look like there are many values for which POTNAAMWard would == Quinn.

For Quinn, it looks like you'd solve this for x:

x = 1+(x*50/1023) 

and maybe when POTNAMMWaarde == 1, Quinn ==1 so the conditional would be true, then all the other conditionals would be false.

thanks for the fast reply!

it defines the value of "Quinn" so when the potentiometer is within this value, the lcd shows his name.(this works)

I also used this value to determine when the button is pressed, if his named should be send to my phone(this also works). The other names after that won't send to my phone but will show on the lcd.

I really can't see how that is supposed to work.

The usual way to check for a range of values is something like this:

if (pot_value > 1 and pot_value <= 50)  lcd.print("Quinn");
if (pot_value > 50 and pot_value <= 100)  lcd.print("Maike");
1 Like

this part works like a charm! the placement of the names on the lcd is perfect at all times. When the button is pushed the same name should appear on my phone but only the name Quinn does....

I tried to upload a video but it won't let me....

iv's posted a video on YouTube, I hope the issue will become more clear this way.

[VIDEO 2023 05 02 02 44 59 - YouTube]

I posted a short video of my proest on YouTube where you can see everything works fine until I want to send another name then "Quinn" to my phone... [VIDEO 2023 05 02 02 44 59 - YouTube]

There are points where the slopes intersect and POTNAAMWaarde == map(POTNAAMWaarde, 0, 1023, 1, 50); so the string gets printed to the LCD as you scan up, but for most values POTNAAMWaarde == map(POTNAAMWaarde, 0, 1023, x,y); 49/50 won't match, but 1/50 will.

So when you press the button, you have a 1/50 = 2% chance of getting a match.

#include <Streaming.h>

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
}

int POTNAAMWaarde = 0;

void loop() {
  // put your main code here, to run repeatedly:

  int Quinn =   map(POTNAAMWaarde, 0, 1023, 1, 50);       // in de volgende regels krijgt elke naam een beriek van de potmeter toegewezen
  int Maike =   map(POTNAAMWaarde, 0, 1023, 51, 100);
  int Dylan =   map(POTNAAMWaarde, 0, 1023, 101, 150);
  int Stijn =   map(POTNAAMWaarde, 0, 1023, 151, 200);
  int Yuri =    map(POTNAAMWaarde, 0, 1023, 201, 250);
  int Miko =    map(POTNAAMWaarde, 0, 1023, 251, 300);
  int Aron =    map(POTNAAMWaarde, 0, 1023, 301, 350);
  int Vince =   map(POTNAAMWaarde, 0, 1023, 351, 400);
  int Rick =    map(POTNAAMWaarde, 0, 1023, 401, 450);
  int terug =   map(POTNAAMWaarde, 0, 1023, 451, 500);


  Serial << "POTNAAMWaarde=" << POTNAAMWaarde << " -> Quinn: " << Quinn << "";
  Serial <<  ",  Maike: " << Maike << "";
  Serial <<  ", Dylan: " << Dylan << "\n";

  POTNAAMWaarde += 1;
  if (POTNAAMWaarde > 1023 ) POTNAAMWaarde = 0;
  delay(100);
}

gives:

POTNAAMWaarde=0 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=1 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=2 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=3 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=4 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=5 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=6 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=7 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=8 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=9 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=10 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=11 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=12 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=13 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=14 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=15 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=16 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=17 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=18 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=19 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=20 -> Quinn: 1,  Maike: 51, Dylan: 101
POTNAAMWaarde=21 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=22 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=23 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=24 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=25 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=26 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=27 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=28 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=29 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=30 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=31 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=32 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=33 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=34 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=35 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=36 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=37 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=38 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=39 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=40 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=41 -> Quinn: 2,  Maike: 52, Dylan: 102
POTNAAMWaarde=42 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=43 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=44 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=45 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=46 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=47 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=48 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=49 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=50 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=51 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=52 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=53 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=54 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=55 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=56 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=57 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=58 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=59 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=60 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=61 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=62 -> Quinn: 3,  Maike: 53, Dylan: 103
POTNAAMWaarde=63 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=64 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=65 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=66 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=67 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=68 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=69 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=70 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=71 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=72 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=73 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=74 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=75 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=76 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=77 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=78 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=79 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=80 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=81 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=82 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=83 -> Quinn: 4,  Maike: 54, Dylan: 104
POTNAAMWaarde=84 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=85 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=86 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=87 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=88 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=89 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=90 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=91 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=92 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=93 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=94 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=95 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=96 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=97 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=98 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=99 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=100 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=101 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=102 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=103 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=104 -> Quinn: 5,  Maike: 55, Dylan: 105
POTNAAMWaarde=105 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=106 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=107 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=108 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=109 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=110 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=111 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=112 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=113 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=114 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=115 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=116 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=117 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=118 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=119 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=120 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=121 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=122 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=123 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=124 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=125 -> Quinn: 6,  Maike: 56, Dylan: 106
POTNAAMWaarde=126 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=127 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=128 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=129 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=130 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=131 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=132 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=133 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=134 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=135 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=136 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=137 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=138 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=139 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=140 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=141 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=142 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=143 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=144 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=145 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=146 -> Quinn: 7,  Maike: 57, Dylan: 107
POTNAAMWaarde=147 -> Quinn: 8,  Maike: 58, Dylan: 108
POTNAAMWaarde=148 -> Quinn: 8,  Maike: 58, Dylan: 108
POTNAAMWaarde=149 -> Quinn: 8,  Maike: 58, Dylan: 108
POTNAAMWaarde=150 -> Quinn: 8,  Maike: 58, Dylan: 108
POTNAAMWaarde=151 -> Quinn: 8,  Maike: 58, Dylan: 108
POTNAAMWaarde=152 -> Quinn: 8,  Maike: 58, Dylan: 108
POTNAAMWaarde=153 -> Quinn: 8,  Maike: 58, Dylan: 108
POTNAAMWaarde=154 -> Quinn: 8,  Maike: 58, Dylan: 108
POTNAAMWaarde=155 -> Quinn: 8,  Maike: 58, Dylan: 108
POTNAAMWaarde=156 -> Quinn: 8,  Maike: 58, Dylan: 108
POTNAAMWaarde=157 -> Quinn: 8,  Maike: 58, Dylan: 108

Alternately, a good way to troubleshoot conditionals like this is to print out both the values and confirm they are misbehaving. For example, print the POTNAAMWaarde and one of the other names like "Dylan" when you think it should print Dylan:

...
if (waardeS1 == HIGH){              // wanneer de schakelaar ingedrukt wordt dan,
  //mySerial.println("Quinn");
   mySerial.print("POTNAAMWaarde:");
   mySerial.print(POTNAAMWaarde);
   mySerial.print(" Dylan:");
   mySerial.print(Dylan);
   mySerial.println();
   digitalWrite(BUZ, HIGH);          // zet uitgang BUZ op aan
...
1 Like

thanks! it's working!

i will clean up my code and show it later!

#include <SoftwareSerial.h>
//#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const byte rxPin = 9;
const byte txPin = 8;
SoftwareSerial mySerial(rxPin, txPin);  // RX is poort 10 - TX is poort 11
LiquidCrystal_I2C lcd(0x27, 20, 4);   // het adres van de gebruikte lcd is 0x27 en heeft op 4 regels elk 20 karakters
#define POTNAAM A3                    // pin a3 van de arduino noemen we POTNAAM
#define POTKLAS A4                    // pin a4 vann de arduino noemen we POTKLAS
int POTNAAMWaarde = 0;                // De waarde van POTNAAMWaarde begint op 0
int S1 = 2;                           // pin 2 van de arduino noemen we S1
int BUZ = 13;                         // pin 13 van de arduino noemen we BUZ, hierdoor klinkt er een signaal bij opstarten
int waardeS1 = LOW;                   // de waarde van S1 begint op 0


void setup() {

pinMode (rxPin, INPUT);             // de nieuwe rxpin is input(receive)
pinMode (txPin, OUTPUT);            // de nieuwe txpin is output(transmit)
pinMode (POTNAAM, INPUT);           // POTNAAM is gemarkeerd als input
pinMode (POTKLAS, INPUT);           // POTKLAS is gemarkeerd als input
pinMode (S1, INPUT);                // S1 is gamarkeerd als input
pinMode (BUZ, OUTPUT);              // BUZ is gemarkeerd als output
Serial.begin (9600);                // stel de snelheid van de serial in op 9600
mySerial.begin(9600);               // zet snelheid gelijkl met de rest van het systeem
mySerial.print ("Aanwezig:");       // zend "aanwezig" naar de telefoon

lcd.init();                         // activeer lcd
lcd.backlight();                    // activeer backlight van lcd
lcd.setCursor(0, 0);                // zet de cursor op positie 0 regel 1
lcd.print("Klas:       JN3.ROBO");  // print op deze regel deze tekst
lcd.setCursor(0, 1);                // zet de cursor op positie 0 regel 2
lcd.print("Selecteer naam:   ");    // print op deze regel deze tekst
lcd.setCursor(0, 3);                // zet de cursor op positie 0 regel 4
lcd.print("huiswerk:   ");          // print op deze regel deze tekst

}

void loop() {

POTNAAMWaarde = analogRead(POTNAAM); //POTNAAMWaarde = analoge waarde van POTNAAM
waardeS1 = digitalRead(S1);         // waardeS1 = binaire waarde van S1 

if (mySerial.available())           // als de telefoon beschikbaar is,
  Serial.write(mySerial.read());    // gebruik de gegevens van de serialmonitor

if (Serial.available())             // als de serialmonitor beschikbaar is,
  mySerial.write(Serial.read());    // gebruik de gegevens van de telefoon
 
int POTNAAM = map(POTNAAMWaarde, 0, 1023, 1, 500);  // het analogere bereik van de potmeter gedefinieerd
lcd.setCursor(6, 2);                                  // zet de cursor op karakter 6 op regel 3

if (POTNAAMWaarde > 0 && POTNAAMWaarde <= 50) {       // wanneer de potmeter het bereik van Quinn heeft dan,
  lcd.print ("Quinn         ");}
if (POTNAAMWaarde > 0 && POTNAAMWaarde <= 50 && waardeS1 == HIGH) {
  mySerial.print ("Quinn");}     

if (POTNAAMWaarde > 50 && POTNAAMWaarde <= 100) {      // de overige namen volgen hier.
  lcd.print ("Maike        ");}
if (POTNAAMWaarde > 50 && POTNAAMWaarde <= 100 && waardeS1 == HIGH) {
  mySerial.print ("Maike");}

if (POTNAAMWaarde > 100 && POTNAAMWaarde <= 150) {  
  lcd.print ("Dylan         ");}
if (POTNAAMWaarde > 100 && POTNAAMWaarde <= 150 && waardeS1 == HIGH) {  
  mySerial.print ("Dylan");}      

if (POTNAAMWaarde > 150 && POTNAAMWaarde <= 200) {  
  lcd.print ("Stijn         ");}
 if (POTNAAMWaarde > 150 && POTNAAMWaarde <= 200 && waardeS1 == HIGH) {  
   mySerial.print ("Stijn"); }      

if (POTNAAMWaarde > 200 && POTNAAMWaarde <= 250) {  
  lcd.print ("Yuri          ");}      
if (POTNAAMWaarde > 200 && POTNAAMWaarde <= 250 && waardeS1 == HIGH) {     
   mySerial.print ("Yuri"); }     

if (POTNAAMWaarde > 250 && POTNAAMWaarde <= 300) {  
  lcd.print ("Miko          ");}     
if (POTNAAMWaarde > 250 && POTNAAMWaarde <= 300 && waardeS1 == HIGH) { 
   mySerial.print ("Miko"); } 

if (POTNAAMWaarde > 300 && POTNAAMWaarde <= 350) {  
  lcd.print ("Aron          ");}  
if (POTNAAMWaarde > 300 && POTNAAMWaarde <= 350 && waardeS1 == HIGH) {
   mySerial.print ("Aron"); }  

if (POTNAAMWaarde > 350 && POTNAAMWaarde <= 400) {  
  lcd.print ("Vince         ");}     
if (POTNAAMWaarde > 350 && POTNAAMWaarde <= 400 && waardeS1 == HIGH) {  
   mySerial.print ("Vince"); }  

if (POTNAAMWaarde > 400 && POTNAAMWaarde <= 450) {  
  lcd.print ("Rick          ");}     
if (POTNAAMWaarde > 400 && POTNAAMWaarde <= 450 && waardeS1 ==HIGH) {  
   mySerial.print ("Rick"); }  

if (POTNAAMWaarde > 451) {          // wanneer de potmeter het bereik van Quinn heeft dan,
  lcd.print ("<--         ");}                     // print een pijltje zodat de gebruiker weet om terug te gaan

if (waardeS1 == HIGH){                  // wanneer de schakelaar ingedrukt wordt dan,
  digitalWrite(BUZ, HIGH);             // zet uitgang BUZ op aan
  delay(50);                                      // wacht 0,05 sec
  digitalWrite(BUZ, LOW);             // zet uitgang BUZ op uit
  delay(100);                                   // wacht 0,05 sec
  digitalWrite(BUZ, HIGH);           // zet uitgang BUZ op aan
  delay(50);                                    // wacht 0,05 sec
  digitalWrite(BUZ, LOW);           // zet uitgang BUZ op uit
  delay(1500); }                            // wacht 1,5 sec om te voorkomen dat er lang ingedrukt wordt

}


One trick with such an even partition of the analog read would be to divide the reading by 50 and use the integer division as an index:

char * names[] = {"Quinn", "Maike", "Dylan", "noname"};

const int POTNAAM = A3;
void setup() {

  Serial.begin(115200);
}

void loop() {
  static int lastPOTNAAMWaarde = 0;
  // put your main code here, to run repeatedly:

  int POTNAAMWaarde = analogRead(POTNAAM) / 50; //POTNAAMWaarde = analoge waarde van POTNAAM
  if (POTNAAMWaarde > 3) POTNAAMWaarde = 3;

  if (POTNAAMWaarde != lastPOTNAAMWaarde) {
    Serial.println (names[POTNAAMWaarde]);
    lastPOTNAAMWaarde = POTNAAMWaarde;
  }
}

that is clean looking! I understand the first part, but how does it determine when it is which name?

and is there an reason tot choose a higher baudrate? I'm not sure how to adjust my hc08 because it is not responding to my AT+BAUD command so I left it at 9600.

No reason for the particular baud rate--I just took the autocomplete defaults from Wokwi:

If the question is about processing a particular name, such as Quinn, you could use it's index in an if instead of the between value stuff:

 if(POTNAAMWaarde == 0) { // Quinn 
     sendSMS("+11234567890","Quinn signaled Arduino");
}

Of if it is how it detemines 75 means Maike?

  • 75/50 = 1.5,
  • 1.5 truncates to 1
  • then the array names holds the c-string "Maike" in names[1]

The last conditional only prints if there is a change in POTNAAMWaarde

nice website! I'm loading my code into the project every time, lol.

as this is my first programming project, I'm not sure how to implement your suggestion.

Can I find an overview of all the functions like int, map, char, etc, etc....?

You need not implement my suggestions. This way works with your code as in #12 and produces a result you like.

If you write something similar in the future, the divide-by-X-to-produce-an-index trick would simplify writing those ifs, and if you can make code work with arrays rather than repetitive code, it is often easier to debug and modify.

My normal source for Arduino reference material used to be accessible through the tabs at the top of the forum pages, but it doesn't seem to be there anymore.

Try the Documentation tab on https://www.arduino.cc/

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.